0

我一直在设计我的第一个数据库模式,但我有点卡住了。我将提供在初始付款后通过额外付款“扩展”过帐的项目的功能,但我的架构不允许将多个付款 ID 链接到单个项目。

我想知道是否有人可以就如何重新排列此架构以处理单个项目的多个付款给我任何建议。如果可能的话,我宁愿不必将全部包裹在这样的东西中:

ID
Item
Payment

这是我目前拥有的:

-- Company Table
CREATE TABLE company (
    id SERIAL PRIMARY KEY,
    name VARCHAR(60) NOT NULL
);

-- Country Table
CREATE TABLE country (
    id SERIAL PRIMARY KEY,
    iso VARCHAR(2) NOT NULL,
    name VARCHAR(100) NOT NULL
);

-- Location Table
CREATE TABLE location (
    id SERIAL PRIMARY KEY,
    name VARCHAR(250) NOT NULL,
    city VARCHAR(100),
    country_id INTEGER NOT NULL REFERENCES country (id),
    coordinate VARCHAR(50) NOT NULL
);

-- Source Table
CREATE TABLE source (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

-- Item Table
CREATE TABLE item (
    id SERIAL PRIMARY KEY,
    solrid VARCHAR(25),
    title VARCHAR(200) NOT NULL,
    truncated_description VARCHAR(250) NOT NULL,
    keyword_description VARCHAR(1000) NOT NULL,
    page_url VARCHAR(150) NOT NULL,
    create_date TIMESTAMP NOT NULL,
    company_id INTEGER NOT NULL REFERENCES company (id),
    source_id INTEGER NOT NULL REFERENCES source (id),
    location_id INTEGER NOT NULL REFERENCES location (id)
);
4

1 回答 1

1

如果只为单个项目付款,那么您应该执行以下操作:

CREATE TABLE payment (
  id SERIAL,
  itemid INTEGER REFERENCES item(id),
  amount DECIMAL(10, 2) NOT NULL
)

还有其他可能性,例如数组,但考虑到您的要求,它们不值得。不要与数据库作斗争。

于 2013-02-04T10:28:56.230 回答