【问题标题】:Correct MySQL DB Structure正确的 MySQL 数据库结构
【发布时间】:2011-04-10 02:46:34
【问题描述】:

我正在为本地餐馆目录开发一个 Web 管理面板。他们的旧系统非常笨重,如果不修改一堆代码就无法扩展。

目前的DB结构是这样的:

table: Restaurants
cols: id, restname, preferred, image, phone, address, website, vip_special

就列而言,此表是静态的。

table: Locations
cols: id, restname, downtown, bluffton, tybee, pooler, etc...

table: Cuisines
cols: id, restname, american, chinese, seafood, bar_tavern, etc...

table: Ambiances
cols: id, restname, outdoor_dining, fine_dining, waterfront, rooftop, romantic, etc...

后 3 个表需要开发人员进入并为每个新位置、美食或氛围添加一个新列,并更改代码以反映这些新列。

就 DBA 而言,我并不是最出色的,所以我很好奇在这种情况下最好的结构是什么。

关联:一家餐厅可以有多个地点、美食和氛围

谢谢大家的帮助。

【问题讨论】:

    标签: mysql codeigniter sysadmin db-structure


    【解决方案1】:

    这是一个开始

    restaurant
    restaurant_id | restaurant_nm | everything that a restaurant has exactly one of
    
    tag_restaurant_rel
    restaurant_id | tag_id
    
    tag
    tag_id | tag_type(_id) | tag_nm
    
    tag_type
    tag_type_id | tag_nm
    

    标签类型可以是枚举,如果您有一些不会更改的类型,您可以删除类型表。
    我不确定您是否要为一家餐厅分配多个地点,因为即使它们可能是连锁店,但氛围可能会有所不同,菜单可能会提供不同的美食

    【讨论】:

    • 那么标签表可以有这样的一行? 1 | ambiance | waterfront2 | location | downtown3 | cuisine | chinese?这将使 tag_restaurant_rel: 1 | 3 1 | 2 1 | 1
    • 连锁餐厅或多地点类型餐厅的位置、氛围和美食问题并不重要,因为他们将为每个特定位置创建新记录,因为这种推理以及并非每个位置将选择使用此服务。
    • @Logan 更正了 rel 表用于创建连接。并且您可以分配 0-∞ 关系。如果您想开始使用公共汽车/地铁站或标记场所,您将不会创建任何新表
    • 您还需要使用 InnoDB 并为关系表使用外键。这样,当场所或标签被删除时,所有无用的关系将被级联
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多