现在有3个表,分别是:
items表(产品表), shops表(商家表) , sub_shops表(商家门店表)
一个shops(商家表)有多个门店表,一个(sub_shops)门店有多个产品, 痛一个商家的多个门店也可能有相同的产品.
现在的问题是如果多个门店有同一个产品,items表中应该用一条数据存(增加一个门店的字段,用逗号把多个门店隔开)还是用多条数据来存(每一个items对应一个门店,但是如果有很多分店都用这一个产品的话,就会出现很多重复的数据,只有其中的门店id不同,其他数据全部相同).
大家帮忙看看还有没有其他更好的方式数据库

解决方案 »

  1.   

    items表(产品表), shops表(商家表) , sub_shops表(商家门店表)均各有id字段
    因为是严格1对多,门店表有商家id就行了
    产品和门店是多对多,需要一个产品和门店对照表:item_sub表,字段为产品id和门店id
      

  2.   

    --商家 1对多 门店
    --门店 1对多 产品
    --产品 1对多 门店--商家
    if exists(select * from sysobjects where name = 'shops')
    drop table shops
    go
    create table shops
    (
    id nvarchar(10) primary key,
    shopsName nvarchar(20)
    )
    go
    if exists(select * from sysobjects where name = 'sub_shops')
    drop table sub_shops
    go
    create table sub_shops
    (
    id nvarchar(10) primary key,
    sub_shopsName nvarchar(20),
    shopsid nvarchar(10) foreign key references shops(id)--外键
    )
    go
    if exists(select * from sysobjects where name = 'items')
    drop table items
    go
    create table items
    (
    id nvarchar(10) primary key,
    itemsName nvarchar(20)
    )
    go
    if exists(select * from sysobjects where name = 'subItems')
    drop table subItems
    go
    create table subItems
    (
    id int primary key identity(1,1),
    sub_shopsid nvarchar(10) foreign key references sub_shops(id) ,--外键
    itemsid nvarchar(10) foreign key references items(id)--外键
    )
    goinsert into shops values('WJF001','万家福')
    insert into shops values('HRWJ001','华润超市')goinsert into sub_shops values('TJFD001','唐家分店','WJF001')
    insert into sub_shops values('XZFD001','香洲分店','WJF001')goinsert into items values('DHP001','蛋黄派')
    insert into items values('FBM001','方便面')GO
    -- 一个产品对应多个门店
    insert into subItems values('TJFD001','DHP001')
    insert into subItems values('XZFD001','DHP001')
    --多个产品对应一个门店
    insert into subItems values('XZFD001','DHP001')
    insert into subItems values('XZFD001','FBM001')goselect * from shops
    select * from sub_shops
    select * from items
    select * from subItems