我只做了数据库没有关系,但现在我需要做一些更为严重和正确的。

这里是我的数据库的设计:alt text

  1. 昆德=客户
  2. Vare=产品
  3. Ordre=了(阅读:我想做一个订单)
  4. VareGruppe=过..类型?(阅读:车子、椅子、柜等等。)
  5. VareOrdre=Product_Orders

这里是我的SQL(源码)架构:

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 = 这使得它能完成。或者周围的其他方法(创建了与1SQL,然后手动插入的产品进入 Product_orders - 1 SQL每个条目)

有帮助吗?

解决方案

你应该先创建一个订单,然后插入产品在表Product_Orders.这是必要的,因为你需要一个实际秩序的标识到将它与表Product_Orders.

你总是应该建立一个记录在外键表之前能够创建一个在你的当前表格。这样你应该创建一个"员额"、客户、类型、产品,以及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

它是SalesPrice(我猜那是什么SamletPris装置),这是造成问题?我可以看到,正在这里有问题。一个共同的设计解决办法是有2表:以及OrderLine.所以是一头表它将有外键的关系到客户表,以及任何其他'顶级的数据。该OrderLine表FK关系的顺序表和产品表,随着数量、单位价格,等等。这是唯一的一个单列项目。现在,获得的销售价格的订单,你总和的(单位价格*量)的OrderLine表。存储SalesPrice为一个整体的订单可能会引起很大的问题。

注意只有在这种情况下,是MySQL:如果你使用些,MySQL server忽略了外键。你必须设置发动机至少如果你想要任何种类的完整性的实际执行数据库的结束而不是仅仅在你的逻辑。这不是你的问题,但它是什么东西是知道的。

fbinder得到了正确的问题:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top