문제

관계없이 데이터베이스 만 수행했지만 이제는 더 심각하고 정확한 일을해야합니다.

내 데이터베이스 디자인은 다음과 같습니다.alt text

  1. Kunde = 고객
  2. 보증 = 제품
  3. ordre = order (읽다: 나는 주문하고 싶다)
  4. varegruppe = ehm..ype? (읽기 : 자동차, 의자, 옷장 등)
  5. vareordre = product_orders

다음은 내 SQL (SQLITE) 스키마입니다.

CREATE TABLE Post (
    Postnr INTEGER NOT NULL PRIMARY KEY,
    Bynavn VARCHAR(50) NOT NULL
);

CREATE TABLE Kunde (
    CPR INTEGER NOT NULL PRIMARY KEY,
    Navn VARCHAR(50) NOT NULL,
    Tlf INTEGER NOT NULL,
    Adresse VARCHAR(50) NOT NULL,
    Postnr INTEGER NOT NULL 
    CONSTRAINT fk_postnr_post REFERENCES Post(Postnr)
);

CREATE TABLE Varegruppe (
    VGnr INTEGER PRIMARY KEY,
    Typenavn VARCHAR(50) NOT NULL
);


CREATE TABLE Vare (
    Vnr INTEGER PRIMARY KEY,
    Navn VARCHAR(50) NOT NULL,
    Pris DEC NOT NULL,
    Beholdning INTEGER NOT NULL,
    VGnr INTEGER NOT NULL
        CONSTRAINT fk_varegruppevgnr_vgnr REFERENCES Varegruppe(VGnr)
);

CREATE TABLE Ordre (
    Onr INTEGER PRIMARY KEY,
    CPR INTEGER NOT NULL
        CONSTRAINT fk_kundecpr_cpr REFERENCES Kunde(CPR),
    Dato DATETIME NOT NULL,
    SamletPris DEC NOT NULL
);

CREATE TABLE VareOrdre (
    VareOrdreID INTEGER PRIMARY KEY,
    Onr INTEGER NOT NULL
        CONSTRAINT fk_ordrenr_onr REFERENCES Ordre(Onr),
    Vnr INTEGER NOT NULL 
        CONSTRAINT fk_varevnr_vnr REFERENCES Vare(Vnr),
    Antal INTEGER NOT NULL
);

올바르게 작동해야합니다.

그러나 나는 혼란 스럽다 Product_Orders.

주문은 어떻게 만들나요? 예를 들어, 2 개의 제품을 사용합니다 SQL INSERT INTO? 나는 일할 것이 없다.

지금까지:

제품과 데이터를 수동으로 삽입 할 때만 Product_Orders 그런 다음 해당 데이터를 추가하십시오 Orders = 완료합니다. 또는 다른 방법 (1 SQL로 주문한 다음 제품을 수동으로 삽입합니다. Product_orders - 1 각 항목에 대한 SQL)

도움이 되었습니까?

해결책

먼저 주문을 작성한 다음 Table Product_orders에 제품을 삽입해야합니다. 테이블 곱 _orders와 연결하려면 ID가있는 실제 순서가 필요하기 때문에 필요합니다.

현재 테이블에서 하나를 만들 수 있기 전에 항상 외국 키 테이블에서 레코드를 만들어야합니다. 이렇게하면 "게시물", 고객, 유형, 제품, 주문 및 Product_order를 작성해야합니다.

다른 팁

이 시도 ...

먼저 고객을 삽입해야합니다

insert into kunde values(1, 'navn', 1, 'adresse', 1)

그런 다음 유형을 삽입합니다

insert into VareGruppe values(1, 'Type1')

그런 다음 제품을 삽입합니다

insert into vare values(1, 'product1', '10.0', 1, 1)

그런 다음 주문을 추가합니다

insert into ordre values(1, 1, '20090101', '10.0')

그런 다음 Product_orders 테이블에 레지스터를 삽입합니다

insert into VareOrdre values (1, 1, 1, 1)

나는 이것이 것이라고 생각한다. :-)

기본 키는 자동화기이므로 삽입에 추가하지 말고 이와 같은 열을 지정하십시오.

insert into vare(Nav, Pris, Beholdning, VGnr) values('product1', '10.0', 1, 1)

사용 Select @@identity ONR 값을 보려면

나는 당신이 이미 어떤 일이 일어날 필요가 있다고 생각합니다. 그러나 내가 생각하는 것은 데이터 무결성을 보장하는 방법입니다.

이것은 거래가 중요 해지는 곳입니다.

http://www.sqlteam.com/article/introduction-to-transactions

문제를 일으킨 Salsprice (Samletpris가 의미하는 것 같아요)입니까? 여기서 문제가되는 것을 볼 수 있습니다. 일반적인 디자인 솔루션 중 하나는 주문 및 주문 라인의 2 개의 테이블을 갖는 것입니다. 순서는 헤더 테이블입니다. 고객 테이블과 외국의 키 관계가 있으며 다른 '최상위'데이터가 있습니다. OrderLine 테이블에는 주문 테이블 및 제품 테이블과 FK 관계가 있으며 주문의 라인 항목에 고유 한 수량, 단가 등과 함께. 이제 주문에 대한 판매 가격을 얻으려면 해당 주문에 대한 Orderline 테이블의 (단가 * 수량)을 요약합니다. 전체 주문을 위해 SalesPrise를 저장하면 큰 문제가 발생할 수 있습니다.

이것이 MySQL 인 경우에 대한 메모 : MyISAM을 사용하는 경우 MySQL 서버는 외래 키를 완전히 무시합니다. 논리가 아닌 데이터베이스 엔드에서 실제로 시행되기를 원한다면 엔진을 InnoDB로 설정해야합니다. 이것은 당신의 질문이 아니지만 알아야 할 것입니다.

fbinder는 질문을 제대로 얻었습니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top