2

私は関係のないデータベースしかやったことがありませんが、今はもっと真面目で正しいことをする必要があります。

これが私のデータベース設計です: 代替テキスト

  1. くんで=お客様
  2. Vare = 製品
  3. Ordre = Order (読み: 注文したい)
  4. VareGruppe = ええと..タイプ? (読み: 車、椅子、クローゼットなど)
  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ます。

注文を作成するにはどうすればよいですか? たとえば、SQL INSERT INTO?を使用する 2 つの製品 私は何も働かせることができません。

ここのところ:

製品とデータを手動で挿入しProduct_Orders、そのデータを追加しOrders =て完成させた場合のみ。またはその逆 (1 つの SQL で注文を作成し、Product_orders - 1エントリごとに手動で製品を SQL に挿入する)

4

5 に答える 5

6

最初に注文を作成してから、テーブル Product_Orders に製品を挿入する必要があります。テーブル Product_Orders に関連付ける ID を持つ実際の注文が必要なため、これが必要です。

現在のテーブルにレコードを作成する前に、常に外部キー テーブルにレコードを作成する必要があります。そうすれば、「Post」、customer、type、product、order、および product_order を作成する必要があります。

于 2009-05-27T15:01:50.013 に答える
4

これを試して ...

最初に顧客を挿入する必要があります

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 @@identityonr 値を確認するために使用します

于 2009-05-27T15:11:17.780 に答える
1

私はあなたが何が起こる必要があるかについてすでにこつを持っていると思います. しかし、あなたが得ていると思うのは、データの完全性を確保する方法です。

ここで、トランザクションが重要になります。

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

于 2009-05-27T15:01:04.600 に答える
0

これが MySQL の場合の注意: MyISAM を使用している場合、MySQL サーバーは外部キーを完全に無視します。ロジックだけでなく、データベース側で何らかの整合性を実際に適用する場合は、エンジンを InnoDB に設定する必要があります。これはあなたの質問ではありませんが、知っておくべきことです。

fbinderは質問を正しくしました:)

于 2009-05-27T15:11:47.623 に答える