2016-07-26 19 views
0

私は次のようなJSONファイルを持っている:次の要件に基づいてテーブルを作成するにはどうすればよいですか? [SQL]

  • 車両
  • pit_int_elapsed_time
  • pit_out_elapse_time

:私のテーブルには、次の値を維持している

"vehicle_number" : 91, 
"pit_stops" : [ { 
    "pit_in_elapsed_time" : 1874.0926, 
    "pit_out_elapsed_time" : 0.0 
}, { 
    "pit_in_elapsed_time" : 1992.9723, 
    "pit_out_elapsed_time" : 0.0 
}, { 
    "pit_in_elapsed_time" : 2862.2129, 
    "pit_out_elapsed_time" : 0.0 
} ], 

をこれに基づいてテーブルを作成するにはどうすればいいですか?

create table pitstop (
vehicle varchar(50) not null, 
inTime varchar(50) not null, 
outTime varchar(50) not null, 
constraint pk_id primary key(inTime, outTime)) 

これが理想的な表の作成方法であるかどうかはわかりませんが、

よろしく

EDIT

私は2つの主要なテーブルを作成することを考えてきました。 1つは車両用です(vehicleIDはpk、pitstopFKは外部キーです)。

create table vehicles (  
vehicle varchar(50) primary key not null 
pitstops_fk int not null); 

またピットストップテーブル:

create table pitstops (
id int primary key autoincrement not null, 
inTime varchar(50) not null, 
outTime varchar(50) not null, 
constraint u_time UNIQUE (inTime, outTime)) 

車-----ピットストップ(1対多)

+0

それは別の車両がまったく同じ(インタイム、OUTTimeは)を有しているかもしれません...ので、私は、主キーwouldn'tが合法的であることを推測します?あなたはどう思う? – sebachili

答えて

0

それは問題、あなたをよりよく理解することなく、多くを語るのは難しいです解決しようとしていますが、私は言うでしょう:

  • 車両IDが常に整数の場合unsigned intは通常、テキストとして扱うよりもパフォーマンスが良い
  • inTimeカラムとoutTimeカラムにSQLの日付タイプを使用すると、SQLの時刻/日付操作を使用できます。実際の時刻を表すタイムスタンプがDATETIMEまたはTIMESTAMPを考慮している場合は、レースなどの開始から経過した秒数であれば、浮動小数点数値型がおそらく良い選択肢になります。
  • inTimeとoutTimeの組み合わせは、コメントに記入すると必ずしも一意ではないため、主キーとしては意味がありません。プライマリキーを指定することを考えるときは、一意性について考えるのではなく、他のテーブルのピットストップイベントをどのように参照するかについて考えてください。この場合、おそらく、主キーとして合成自動インクリメントunsigned intを提案するでしょう。
+0

ご意見ありがとうございます。 私がpkとしてオートインクリメンタルIDを置くと、テーブルに繰り返し値が得られるようになりますか? ID、ビークルID、インタイム、アウトタイム。 – sebachili

+0

正直言って、主キーは3つの要素によって形成されます:車、時間、outTime。しかし、私はこれが正しいとは思わない。 – sebachili

+0

データに規則を適用するためにスキーマをどの程度使用したいかに関して、常に決定がなされている。はい、合成PKでは、同じvehicleID、inTime、およびoutTimeを持つ複数の行を持つことができます。これはエラーを示します。しかし、おそらく、オーバーレイされたinTimeとoutTimeの範囲を持つ同じビークルを持つこともエラーになります。これはスキーマでは検出できません。 – thewmo

0

まず、データベースに保存したいときは、varcharを使用しません。代わりにFloatまたはRealを使用してみてください。

次は、あなたのプライマリキーであなたの車を取るべきであるということです。

あなたのデータベースにIDを導入することもお勧めします。

このような何か:

CREATE TABLE pitstop (
ID int NOT NULL AUTO_INCREMENT, 
vehicle varchar(50) NOT NULL, 
inTime float NOT NULL, 
outTime float NOT NULL, 
constraint pk_id primary key(ID, vehicle)) 
+0

ありがとうございます。私は自分自身をよく説明していないと思う。テーブル内では、繰り返しのある車両を持つことができますが、異なる(inTime、outTime)...ということで、2つのテーブルを作成する必要があります。 1つは車両用、もう1つはピットストップ用(inTime、outTime)????? – sebachili

+0

あなたはあなたが言ったように、車両のための2つのテーブルと、特定の車両への外部キーを使った入退出のテーブル –

関連する問題