一、 核心设计思路
- 数据库环境:创建
NHibernateDemo数据库,使用 SQL Server Manager 进行表设计。 - 关系模型:News 与 Keys 是多对多关系(一条新闻可有多个关键字,一个关键字也可对应多条新闻)。
- 表结构:采用“三张表 + 一张关系表”的设计,即两张主表(
Keys、News)和一张中间关系表(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_News和FK_NewsKeys_Keys。 - 主键表:
News(关联列ID) → 外键表:NewsKeys(关联列NewsID)。 - 主键表:
Keys(关联列ID) → 外键表:NewsKeys(关联列KeysID)。 - 图中展示了在“表和列规范”中配置
News表的ID映射到NewsKeys表的NewsID的过程。
四、NHibernate 映射方向
完成上述表设计后,在 NHibernate 中通常会:
- 创建对应的实体类(
News、Keys)。 - 在
News实体中定义ICollection<Keys> Keywords属性。 - 在
Keys实体中定义ICollection<News> NewsList属性。 - 通过
.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)

Previous: NHibernate是什么