一种类型有多个用例 - 一个或两个表?

时间:2014-09-09 20:41:21

标签: rdbms

我正在建立一个旨在匹配卖家和买家的网站。用户可以提供要出售的物品或要求购买的物品,并且该网站将尝试连接潜在的卖家和类似物品的买家。

我将使用SQL存储有关每个项目的信息(用户,颜色,尺寸,品牌,类型,型号,数量等)。

问题是,我应该为这些项目制作一个表格,还是应该有两个表格,一个用于提供的项目,一个用于要求的项目?

一方面,几乎所有的属性都是一样的。另一方面,我很少会立刻查询整个表格;通常我会想要搜索刚提供的商品或只是要求的商品。

2 个答案:

答案 0 :(得分:1)

规范化的一种方法是引入3个表格; usersitemstrades具有以下结构:

CREATE TABLE users(
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(32)
);

CREATE TABLE items(
    id INT AUTO_INCREMENT PRIMARY KEY,
    color VARCHAR(8),
    size VARCHAR(8),
    brand VARCHAR(8),
    type VARCHAR(8)
);

CREATE TABLE trades(
    id INT AUTO_INCREMENT PRIMARY KEY,
    trade ENUM('buy', 'sell'),
    user_id INT REFERENCES users (id),
    item_id INT REFERENCES items (id)
);

因此,如果我想将特定商品的买家与同一商品的卖家进行匹配,我可以对trades表进行简单的连接。 (可以包含附加联接以检索买方,卖方和物品的信息。)

fiddle上的现场演示。结果表明:

  1. Alex想要买一件黑色的ABC黑色连帽衫。约翰有一个待售。
  2. 亚历克斯想买一条小白色EFG短裤。简有一个待售。

答案 1 :(得分:0)

你必须制作两个表,一个表将是“用户”(具有单个用户ID),另一个表是“items”,其中你有一个用户id字段,另一个表是项目类型(它用于出售或请求)是表格的另一个字段,用于存储项目的信息。