数据库表设计

一、 核心设计思路

  • 数据库环境:创建 NHibernateDemo 数据库,使用 SQL Server Manager 进行表设计。
  • 关系模型:News 与 Keys 是多对多关系(一条新闻可有多个关键字,一个关键字也可对应多条新闻)。
  • 表结构:采用“三张表 + 一张关系表”的设计,即两张主表(KeysNews)和一张中间关系表(NewsKeys)。

二、 表结构详细字段解析

1. 关键字表(Keys / Keywords)

用于存储关键字基础信息:

  • ID:主键(标识列),int 类型,自增。
  • Name:关键字名称(如“体育”、“科技”)。
  • AddTime:添加时间。

2. 新闻表(News)

用于存储新闻正文信息:

  • ID:主键(标识列),int 类型,自增。
  • Title:新闻标题。
  • Content:新闻内容(注意图中带方括号,通常为 varchar(max)text 类型)。
  • AddTime:发布时间。
  • Status:状态(如草稿、已发布等)。

3. 关系表(NewsKeys)

用于关联新闻与关键字,实现多对多:

  • ID:关系表自身主键(标识列),int 类型,自增。
  • NewsID:外键,关联 News.ID
  • KeysID(图中也写作 KeyID):外键,关联 Keys.ID

三、 外键关系设置(SQL Server)

在设置外键时(如图中弹窗所示):

  • 关系名:如 FK_NewsKeys_NewsFK_NewsKeys_Keys
  • 主键表News(关联列 ID) → 外键表NewsKeys(关联列 NewsID)。
  • 主键表Keys(关联列 ID) → 外键表NewsKeys(关联列 KeysID)。
  • 图中展示了在“表和列规范”中配置 News 表的 ID 映射到 NewsKeys 表的 NewsID 的过程。

四、NHibernate 映射方向

完成上述表设计后,在 NHibernate 中通常会:

  1. 创建对应的实体类(NewsKeys)。
  2. News 实体中定义 ICollection<Keys> Keywords 属性。
  3. Keys 实体中定义 ICollection<News> NewsList 属性。
  4. 通过 .hbm.xml 映射文件配置 many-to-many,NHibernate 会自动处理中间表 NewsKeys 的读写。

建表 SQL 参考

你可以直接在 NHibernateDemo 数据库中执行以下脚本快速建表:

-- 1. 关键字表
CREATE TABLE Keys (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(50) NOT NULL,
    AddTime DATETIME DEFAULT GETDATE()
);

-- 2. 新闻表
CREATE TABLE News (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    Title NVARCHAR(100) NOT NULL,
    Content TEXT,
    AddTime DATETIME DEFAULT GETDATE(),
    Status INT DEFAULT 1
);

-- 3. 关系表
CREATE TABLE NewsKeys (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    NewsID INT NOT NULL,
    KeysID INT NOT NULL,
    -- 外键约束
    CONSTRAINT FK_NewsKeys_News FOREIGN KEY (NewsID) REFERENCES News(ID),
    CONSTRAINT FK_NewsKeys_Keys FOREIGN KEY (KeysID) REFERENCES Keys(ID)
);Code language: PHP (php)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注