Reactjs 设计模式:以何种方式在DB中构造表:将对网站上文章的访问限制为仅订阅用户?
这是我关于stackoverflow的第一个问题。因此,如果不符合标准,请原谅: 使用的数据库:PostgreSQL v11.2 我正在创建一个react.js应用程序,向登录用户显示文章这些用户可以是:Reactjs 设计模式:以何种方式在DB中构造表:将对网站上文章的访问限制为仅订阅用户?,reactjs,database,postgresql,design-patterns,permissions,Reactjs,Database,Postgresql,Design Patterns,Permissions,这是我关于stackoverflow的第一个问题。因此,如果不符合标准,请原谅: 使用的数据库:PostgreSQL v11.2 我正在创建一个react.js应用程序,向登录用户显示文章这些用户可以是: (i) 已订阅其中一个订阅计划的人,或, (ii)只需登录并浏览,但尚未订阅。 (此部分已管理-此处没有问题) 一篇文章可以属于不同的“类别”。 (此部分已管理-这里没有问题) 现在,对于订阅用户,将显示一些普通用户看不到的“类别”文章。 我想创建一个数据库结构,该结构将根据用户是否订阅来处理
(i) 已订阅其中一个订阅计划的人,或,
(ii)只需登录并浏览,但尚未订阅。
(此部分已管理-此处没有问题) 一篇文章可以属于不同的“类别”。
(此部分已管理-这里没有问题)
现在,对于订阅用户,将显示一些普通用户看不到的“类别”文章。
我想创建一个数据库结构,该结构将根据用户是否订阅来处理此可见性。
表列(这很重要):USER
身份证,姓名, 已订阅(布尔值)
表列(这很重要):CATEGORY
id,类别名称
表列(这很重要):文章
id,标题
表格列:物品类别
id、物品id、类别id
表列:订阅
id、计划名称、价格、说明
我还没有构建实现此功能的结构。
什么是更好的方法?
(1)我应该在类别/文章级别进行吗?
例如:“ARTICLE\u CATEGORY”和“ARTICLE”表将包含一个布尔列“subscribers\u only”。
或
(2)我是否应该维护一个单独的表,将我的订阅计划与类别/文章链接起来?
我的用户模型如下所示:
const User = sequelize.define("user", {
full_name: { type: DataTypes.STRING },
email: { type: DataTypes.STRING },
password: { type: DataTypes.STRING },
email_verify_token: { type: DataTypes.STRING },
is_email_verified: { type: DataTypes.BOOLEAN },
is_subscribed: { type: DataTypes.BOOLEAN },
... <many more columns>
});
const SubscriptionPlan = sequelize.define("subscription_plan", {
plan_name: { type: DataTypes.INTEGER },
price: { type: DataTypes.INTEGER }
... <many more columns>
});
const Subscriber = sequelize.define("subscriber", {
user_id: { type: DataTypes.INTEGER },
subscription_id: { type: DataTypes.INTEGER }
... <many more columns>
});
const Article = sequelize.define("article", {
title: { type: DataTypes.STRING },
url: { type: DataTypes.STRING },
display_pic: { type: DataTypes.STRING },
... <many more columns>
});
const ArticleCategory = sequelize.define("article_catgeory", {
article_id: { type: DataTypes.INTEGER },
category_id: { type: DataTypes.INTEGER }
... <many more columns>
});
const User=sequelize.define(“用户”{
全名:{type:DataTypes.STRING},
电子邮件:{type:DataTypes.STRING},
密码:{type:DataTypes.STRING},
电子邮件\u验证\u令牌:{type:DataTypes.STRING},
电子邮件是否已验证:{type:DataTypes.BOOLEAN},
已订阅:{type:DataTypes.BOOLEAN},
...
});
我的订阅计划模型如下所示:
const User = sequelize.define("user", {
full_name: { type: DataTypes.STRING },
email: { type: DataTypes.STRING },
password: { type: DataTypes.STRING },
email_verify_token: { type: DataTypes.STRING },
is_email_verified: { type: DataTypes.BOOLEAN },
is_subscribed: { type: DataTypes.BOOLEAN },
... <many more columns>
});
const SubscriptionPlan = sequelize.define("subscription_plan", {
plan_name: { type: DataTypes.INTEGER },
price: { type: DataTypes.INTEGER }
... <many more columns>
});
const Subscriber = sequelize.define("subscriber", {
user_id: { type: DataTypes.INTEGER },
subscription_id: { type: DataTypes.INTEGER }
... <many more columns>
});
const Article = sequelize.define("article", {
title: { type: DataTypes.STRING },
url: { type: DataTypes.STRING },
display_pic: { type: DataTypes.STRING },
... <many more columns>
});
const ArticleCategory = sequelize.define("article_catgeory", {
article_id: { type: DataTypes.INTEGER },
category_id: { type: DataTypes.INTEGER }
... <many more columns>
});
const SubscriptionPlan=sequelize.define(“订阅计划”{
计划名称:{type:DataTypes.INTEGER},
价格:{type:DataTypes.INTEGER}
...
});
我的订户模型如下所示:
const User = sequelize.define("user", {
full_name: { type: DataTypes.STRING },
email: { type: DataTypes.STRING },
password: { type: DataTypes.STRING },
email_verify_token: { type: DataTypes.STRING },
is_email_verified: { type: DataTypes.BOOLEAN },
is_subscribed: { type: DataTypes.BOOLEAN },
... <many more columns>
});
const SubscriptionPlan = sequelize.define("subscription_plan", {
plan_name: { type: DataTypes.INTEGER },
price: { type: DataTypes.INTEGER }
... <many more columns>
});
const Subscriber = sequelize.define("subscriber", {
user_id: { type: DataTypes.INTEGER },
subscription_id: { type: DataTypes.INTEGER }
... <many more columns>
});
const Article = sequelize.define("article", {
title: { type: DataTypes.STRING },
url: { type: DataTypes.STRING },
display_pic: { type: DataTypes.STRING },
... <many more columns>
});
const ArticleCategory = sequelize.define("article_catgeory", {
article_id: { type: DataTypes.INTEGER },
category_id: { type: DataTypes.INTEGER }
... <many more columns>
});
const Subscriber=sequelize.define(“订户”{
用户id:{type:DataTypes.INTEGER},
订阅id:{type:DataTypes.INTEGER}
...
});
我的ARICLE模型如下所示:
const User = sequelize.define("user", {
full_name: { type: DataTypes.STRING },
email: { type: DataTypes.STRING },
password: { type: DataTypes.STRING },
email_verify_token: { type: DataTypes.STRING },
is_email_verified: { type: DataTypes.BOOLEAN },
is_subscribed: { type: DataTypes.BOOLEAN },
... <many more columns>
});
const SubscriptionPlan = sequelize.define("subscription_plan", {
plan_name: { type: DataTypes.INTEGER },
price: { type: DataTypes.INTEGER }
... <many more columns>
});
const Subscriber = sequelize.define("subscriber", {
user_id: { type: DataTypes.INTEGER },
subscription_id: { type: DataTypes.INTEGER }
... <many more columns>
});
const Article = sequelize.define("article", {
title: { type: DataTypes.STRING },
url: { type: DataTypes.STRING },
display_pic: { type: DataTypes.STRING },
... <many more columns>
});
const ArticleCategory = sequelize.define("article_catgeory", {
article_id: { type: DataTypes.INTEGER },
category_id: { type: DataTypes.INTEGER }
... <many more columns>
});
const Article=sequelize.define(“Article”{
标题:{type:DataTypes.STRING},
url:{type:DataTypes.STRING},
显示图片:{type:DataTypes.STRING},
...
});
我的ARICLE_类别模型如下所示:
const User = sequelize.define("user", {
full_name: { type: DataTypes.STRING },
email: { type: DataTypes.STRING },
password: { type: DataTypes.STRING },
email_verify_token: { type: DataTypes.STRING },
is_email_verified: { type: DataTypes.BOOLEAN },
is_subscribed: { type: DataTypes.BOOLEAN },
... <many more columns>
});
const SubscriptionPlan = sequelize.define("subscription_plan", {
plan_name: { type: DataTypes.INTEGER },
price: { type: DataTypes.INTEGER }
... <many more columns>
});
const Subscriber = sequelize.define("subscriber", {
user_id: { type: DataTypes.INTEGER },
subscription_id: { type: DataTypes.INTEGER }
... <many more columns>
});
const Article = sequelize.define("article", {
title: { type: DataTypes.STRING },
url: { type: DataTypes.STRING },
display_pic: { type: DataTypes.STRING },
... <many more columns>
});
const ArticleCategory = sequelize.define("article_catgeory", {
article_id: { type: DataTypes.INTEGER },
category_id: { type: DataTypes.INTEGER }
... <many more columns>
});
const articleCegory=sequelize.define(“article_catgeory”{
项目id:{type:DataTypes.INTEGER},
类别id:{type:DataTypes.INTEGER}
...
});
您需要给我们一个您尝试过的示例,并展示与此问题相关的任何代码/工作。另外,您只需说“数据库”。哪个数据库,哪个版本。@evilfish为之前的不完整数据道歉。数据库:postgresv11。2@evilfish此外,我还更新了问题的“什么应该是更好的方法”部分。我没有写任何代码来实现这个特殊的东西。我必须建立我的数据库结构,在那个阶段,在拥有一个完整的数据库之前,我自己就有这种怀疑。我想知道我应该采用什么方法来构建DB结构。任何帮助都会很好。您需要给我们一个您尝试过的示例,并显示与此问题相关的任何代码/工作。另外,您只需说“数据库”。哪个数据库,哪个版本。@evilfish为之前的不完整数据道歉。数据库:postgresv11。2@evilfish此外,我还更新了问题的“什么应该是更好的方法”部分。我没有写任何代码来实现这个特殊的东西。我必须建立我的数据库结构,在那个阶段,在拥有一个完整的数据库之前,我自己就有这种怀疑。我想知道我应该采用什么方法来构建DB结构。任何帮助都会很好。