小编Leo*_*Han的帖子

在数据库中存储用户首选项的正确方法是什么?

我有一个 MySQL 数据库,用于存储我的服务提供的用户电子邮件和新闻文章。我希望用户能够保存/为他们以后想阅读的文章添加书签。

我完成此任务的计划是在存储用户电子邮件的表中有一列,其中包含由逗号分隔的唯一 ID 字符串,其中唯一 ID 是在将每篇文章添加到数据库中时分配给它们的值。这些文章存储在一个单独的表中,我用它UUID_SHORT()来生成类型的唯一 ID BIGINT

例如,假设在我存储文章的表中,我有

ArticleID             OtherColumn
4419350002044764160   other stuff
4419351050184556544   other stuff
Run Code Online (Sandbox Code Playgroud)

在我存储用户数据的表中,我会

UserEmail             ArticlesSaved                                   OtherColumn
examlple1@email.com   4419350002044764160,4419351050184556544,...     other stuff
examlple2@email.com   4419350002044764160,4419351050184556544,...     other stuff
Run Code Online (Sandbox Code Playgroud)

表示前两个用户已保存 ID 为4419350002044764160和 的文章4419351050184556544

这是在数据库中存储此类内容的正确方法吗?如果有更好的方法,有人可以解释一下吗?

我想到的另一个选择是为每个用户建立一个单独的表,我可以将他们保存到列中的文章的 ID 存储在其中,尽管这篇文章的答案是这不是很有效:数据库效率 - 每个用户的表 vs . 用户表

php mysql sql database storage

2
推荐指数
2
解决办法
5121
查看次数

如果将分配运算符设为私有,为什么仍允许此分配?

给出以下示例:

// test.cpp
class A {
public:
private:
    A& operator=(const A&);  // don't allow assignment operator
    A(const A&);  // don't allow default copy constructor
    void func();
};

template<class T>
class B {
public:
    B(A &a) : a_(a) {}
    void setA(A* a) { a_ = *a; }  // No error is raised here.
    void func();

protected:
    B& operator=(const B&) { return *this; }
    A& a_;
};
Run Code Online (Sandbox Code Playgroud)

我希望void setA(A* a) { a_ = *a; }B中会出现错误,因为A的赋值运算符被设为私有,而A和B不是朋友,但是在编译时不会出现错误。

$ g++ -c test.cpp  // …
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
1
解决办法
87
查看次数

标签 统计

c++ ×1

database ×1

mysql ×1

php ×1

sql ×1

storage ×1