none
请教一下,有关数据表设计问题 RRS feed

  • 问题

  • 比如我有2张表第一张表字段是这样ID Name AdressID(字段为ID 用户 省会的ID,也就是第二张表的ID) ,第二张表是ID Name(字段表示为ID 省会名),然后第一张表的省会和第二表的ID相关连

    就这样两张表,我想问一下,如果是多个表这样设计,比如我的第二张表中的字段删除了一个。那我的第一张表的,有记录不就读不出来了吗?有什么好的办法啊

    2010年4月12日 2:19

答案

全部回复

  • If table1.addressid is fkey to table2.id, you can't drop table2.id column. Can drop table2.name and still be able to get rows in table1, but unable to get city name. If no fkey, tables are not related from sql point of view. So dropping column from table2 will not affect table1.
    2010年4月12日 2:38
  • 数据不会读不出来, 只会导致无法 join 去取另一个表的对应数据而已,

    可以考虑主外键约束, 这样在修改相关表的时候会有提示.

     

    2010年4月12日 4:55
  • 可以使用外键约束,对于“比如我的第二张表中的字段删除了一个。那我的第一张表的,有记录不就读不出来了吗?”,要看外键约束On Delete的操作设置

    e.g

     

    use  Test
    Go
    if object_id('Users') is not NULL
        Drop Table Users
    if object_id('Adress') is not NULL
        Drop Table Adress
    
    create table Adress(
        ID int NOt Null,
        Name nvarchar(50),
        Constraint PK_Adress Primary Key(ID)
    )   
    
    create table Users(
        ID int,
        Name nvarchar(50),
        AdressID int  Null,
        Constraint PK_Users Primary Key(ID)
        --1.当User表与Address表数据行已有引用关系,删除Adress表数据时,数据库引擎将引发错误,并回滚对Address中相应行的删除操作。
        ,Constraint FK_Users_AdressID Foreign Key(AdressID) References Adress(ID) On Delete No Action
       
        --2.当User表与Address表数据行已有引用关系,删除Adress表数据时,则将从引用表User中删除相应行。
        --,Constraint FK_Users_AdressID Foreign Key(AdressID) References Adress(ID) On Delete Cascade
       
        --3.当User表与Address表数据行已有引用关系,删除Adress表数据时,则组成外键的所有值都将设置为 Null。
        --,Constraint FK_Users_AdressID Foreign Key(AdressID) References Adress(ID) On Delete Set Null
       
    )   
    
    
    
        

    2010年4月12日 23:34