2016-07-26 1 views
0

[SQL] :다음 요구 사항을 기반으로 테이블을 어떻게 작성해야합니까? 나는 다음과 같은 JSON 파일을 가지고

내 표는 다음과 같은 값을 유지하는
"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 
} ], 

:

  • 차량
  • pit_int_elapsed_time
  • pit_out_elapse_time

을 이걸 기반으로 테이블을 어떻게 만듭니 까 ??

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)) 

이것이 테이블을 만드는 이상적인 방법 일지 모르겠습니까?

감사

편집

내가 2 개 주 테이블을 만들 생각되었다. 하나는 차량 (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

그것은 될 수있는 또 다른 차량이 있다고 정확히 같은 (INTIME, OUTTIME) ... 그래서 기본 키 난 인터뷰가 합법적 인 것이 생각 ???너희들은 어떻게 생각하니? – sebachili

답변

0

그것은 문제가 당신의 더 나은 이해없이 많은 말을하기 어렵다 해결하려고하지만, 나는 말할 것이다 :

  • 차량 ID가 항상 정수인 경우 unsigned int는 일반적으로 텍스트로 처리하는 것보다 더 잘 수행됩니다.
  • inTime 및 outTime 열에 SQL 날짜 유형을 사용하면 SQL 시간/날짜 연산을 사용할 수 있습니다. 실제 시간대를 나타내는 타임 스탬프가 DATETIME 또는 TIMESTAMP를 고려한다면, 레이스가 시작된 이래로 경과 된 초 또는 그와 비슷한 것이면 부동 소수점 숫자 유형이 더 나은 선택 일 수 있습니다.
  • inTime과 outTime의 조합은 주 키로 이해하지 못합니다. 메모에서 메모 할 때 반드시 고유하지는 않기 때문입니다. 기본 키 지정에 대해 생각할 때 고유성에 대해 생각하지 말고 다른 테이블의 피트 스톱 이벤트를 참조하는 방법에 대해 생각하십시오. 이 경우에는 아마도 자동으로 증가 된 부호없는 int를 기본 키로 제안 할 것입니다.
+0

의견을 보내 주셔서 감사합니다. 글쎄, pk로 autoincremental id를 넣으면 테이블에 반복되는 값을 넣을 수있게 될 것입니다 ?? ID, vehicleID, inTime, outTime. – sebachili

+0

솔직히 말해서 기본 키는 세 가지 요소 (차량, 시간, 소요 시간)로 구성됩니다. 그러나 나는 이것이 올바르지 않다고 생각합니다. – 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

감사합니다. 나는 내가 자신을 잘 설명하지 않았다고 생각한다. 테이블 안에서 나는 반복되는 차량을 가질 수 있지만 다른 시간 (outTime, outTime)으로 ... 알았어, 나는 두 개의 테이블을 만들어야 할 수도있다. 하나는 차량용이고 다른 하나는 피트 스톱 (inTime, outTime) 용 ??? – sebachili

+0

그러면 여러분은 차량에 2 개의 테이블을 만들고 특정 차량에 외래 키를 사용하여 내부 및 외부 시간에 대해 하나씩 테이블을 만듭니다. –

관련 문제