@@ -1536,3 +1536,120 @@ MVC模式 业务逻辑写在Model里
15361536Thinkphp Model Service Logic
15371537java Model DTO
15381538```
1539+ ## 14. 数据库设计思维
1540+ 数据库设计是一个由粗到细的过程,先设计大体数据分类,然后再细化
1541+ 1 . 此项目的数据库主题有哪些
1542+ * user表(这是最基础的表,每个系统都会有)
1543+ * 期刊(这是一个比较粗的概念,期刊分类很多)
1544+ * movie表
1545+ * Sentence表
1546+ * music表
1547+
1548+ * 它们的相似性: 它们都有url,pubdate,title等字段
1549+ * 它们的差异性: 比如movie中有导演,Sentence中有演员等
1550+ * 因为有一些相似性的字段,如果把这三个表/模型设计成一个表(期刊表),也是可以的,
1551+ 但是因为它们的差异性,设计成一个表扩展性是比较差的,
1552+ 2 . 如何用数据表,标识一期一期的数据
1553+ 创建一个新的Model/表,来记录每一期的期刊,flow表
1554+ 3 . 如何设计数据库
1555+ 初学者还是要根据概念性的知识来做数据库设计,经验多了凭的都是感觉
1556+
1557+ movie、Sentence、muisc 和flow有什么区别?
1558+ * 实体表
1559+ * movie、Sentence、muisc
1560+ * 实体表记录本身相关信息,相当于大千世界的映射
1561+ * 业务表
1562+ * flow
1563+ * 业务表是很难找到一个具体的实体来体现的,这个是抽象出来的,记录业务,用来解决业务问题的
1564+ * 业务表的难点:
1565+ 1 . 抽象
1566+ 2 . 多变性:业务表没有一个具体的设计方式,存在着好/坏的业务表的区别;
1567+ 好的业务表,会让我们操作数据表的时候变得简单,数据库性能好
1568+ 不好的业务表,会导致查询数据表变得繁琐,数据库性能不好
1569+
1570+ ## 15. 定义模型
1571+ ### 期刊classic模型
1572+ ``` js
1573+ // models/classic.js
1574+ import { Model , Sequelize } from " sequelize/types" ;
1575+
1576+ const { sequelize } = require (' ../../core/db' ) // sequelize实例
1577+
1578+ // movie、Sentence、muisc
1579+
1580+ /**
1581+ * 期刊模型
1582+ * 定义表名,描述相应的实体
1583+ * movie、Sentence、muisc合成称为classic
1584+ * movie、Sentence、muisc、book合成称为art
1585+ *
1586+ * 共同字段/属性
1587+ * image,title,pubdate,content,fav_nums,type(代号)
1588+ * 不同: music: url
1589+ *
1590+ * 因为有共同字段/属性,先定义一个基类,让其他类继承这个基类
1591+ */
1592+
1593+ // 通用字段
1594+ const classicFields = {
1595+ image: {
1596+ type: Sequelize .STRING
1597+ },
1598+ content: Sequelize .STRING ,
1599+ pubdate: Sequelize .DATEONLY ,
1600+ fav_nums: {
1601+ type: Sequelize .INTEGER ,
1602+ defaultValue: 0
1603+ },
1604+ title: Sequelize .STRING ,
1605+ type: Sequelize .TINYINT
1606+ }
1607+
1608+
1609+ class Movie extends Model {
1610+
1611+ }
1612+ Movie .init (classicFields,{
1613+ sequelize,
1614+ tableName: ' movie'
1615+ })
1616+
1617+ class Sentence extends Model {
1618+
1619+ }
1620+ Sentence .init (classicFields,{
1621+ sequelize,
1622+ tableName: ' sentence'
1623+ })
1624+
1625+ class Music extends Model {
1626+
1627+ }
1628+
1629+ const musicFields = Object .assign ({
1630+ url: Sequelize .STRING
1631+ },classicFields)
1632+
1633+ Music .init (musicFields,{
1634+ sequelize,
1635+ tableName: ' sentence'
1636+ })
1637+ ```
1638+ ### flow模型
1639+ ``` js
1640+ const { Sequelize , Model } = require (' sequelize' )
1641+ const { sequelize } = require (' ../../core/db' ) // sequelize实例
1642+
1643+ class Flow extends Model {
1644+
1645+ }
1646+
1647+ Flow .init ({
1648+ index: Sequelize .INTEGER ,
1649+ art_id: Sequelize .INTEGER ,
1650+ type: Sequelize .INTEGER
1651+ },{
1652+ sequelize,
1653+ tableName: ' flow'
1654+ })
1655+ ```
0 commit comments