数据库模型结构

时间:2009-05-27 15:21:40

标签: sql database

我有一个列。 群组在group_types(买家,卖家,裁判)中存储了不同的类型。只有当集团属于买方类型时,才有其他类型(更专业),如电气和机械。

我对如何将其存储在数据库中感到困惑。

有人可以建议我使用数据库结构吗?

感谢

5 个答案:

答案 0 :(得分:3)

将您的group_types存储为hieararchical表(使用nested setsparent-child型号):

Parent-child

typeid parent name

1      0      Buyers
2      0      Sellers
3      0      Referee
4      1      Electrical
5      1      Mechanic
SELECT  *
FROM    mytable
WHERE   group IN
        (
        SELECT  typeid
        FROM    group_types
        START WITH
                typeid = 1
        CONNECT BY
                parent = PRIOR typeid
        )

将选择Oracle中的所有买家。

Nested sets

typeid lower  upper  Name
1      1      2      Buyers
2      3      3      Sellers
3      4      4      Referee
4      1      1      Electrical
5      2      2      Mechanic
SELECT  *
FROM    group_types
JOIN    mytable
ON      group BETWEEN lower AND upper
WHERE   typeid = 1

将选择任何数据库中的所有买家。

如果您不需要在Nested sets上进行分层排序或频繁更新,

group_types可在任何地方实施且性能更高。

Parent-child可以在OracleSQL Server中轻松实现,并且可以在MySQL中轻松实施。它允许简单的结构更改和分层排序。

在我的博客中查看有关如何在MySQL中实现它的文章:

答案 1 :(得分:0)

您可以存储其他类型,例如buyer_mechanicalbuyer_electrical

答案 2 :(得分:0)

你可以尝试:

Group
group_id
group_name
group_parent_id

with entries (1, buyers, 0), (2, sellers, 0), (3, referee, 0), (4, electrical, 1), (5, mechanical, 1)

这具有无限可扩展的优势,因此每个子组可以拥有任意数量的子组。

答案 3 :(得分:0)

通常,您有扩展表。这些只是模式中的附加表,其中包含通过某种类型的键

链接到主表的其他信息

例如,假设你的主表是:

People
  PersonId int, PK
  GroupTypeId int, FK to GroupTypes
  Name varchar(100)

GroupTypes
  GroupTypeId int, PK
  GroupTypeName varchar(20)

BuyerTypes
  BuyerTypeId int, PK
  BuyerTypeName varchar(20)

BuyerData
  PersonId int, FK
  BuyerTypeId int FK

==== 此外,BuyerData将在PersonId和BuyerTypeId

上具有复合主键(PK)

在提取买方数据时,您可以使用

之类的查询
SELECT *
  FROM People P 
    INNER JOIN BuyerData BD on (P.PersonId = BD.PersonId)
    INNER JOIN BuyerTypes BT on (BD.BuyerTypeId = BT.BuyerTypeId)

答案 4 :(得分:0)

grouptype:ID,姓名('买家','卖家','裁判')

group:GroupTypeID,ID,Name('electrical'和'mechanical',如果grouptypeid =='买家')

联系人:GroupTypeID(NOT NULL),GroupID(NULL),其他属性

表组将根据需要填充GroupTypes的记录。

Contact.GroupID可以为NULL,因为GroupType不需要任何组。

用户界面必须处理群组选择。您可以使用触发器检查组/类型逻辑。