小编use*_*297的帖子

PostgreSQL架构 - 使用场景/案例

我为我的新手问题道歉,但我是PostgreSQl和模式的新手.我很难掌握PostgreSQL中的模式的目的..一般而言.模式的潜在用例有哪些?

我已经说过,模式就像是无法嵌套的目录.好吧,所以我认为模式是一种在数据库中对表进行分组的方法.本书没有说明如何实现,也没有提到除了一个简单的例子(下一段)之外的潜在用途.

福利和潜在用例#1

到目前为止,我只理解了一个(看似微不足道)模式的好处.这个好处是您可以拥有多个具有相同名称的表,并且只要每个这样的表位于不同的模式中,就不会发生冲突,因为名称空间限定符(模式名称)可用于处理所需的特定表.

我真的不明白为什么你会有多个同名的表开头.我认为这是一个非常罕见的案例,但是文档来自我,好像每个人都应该使用模式.拥有多个同名的表对我来说似乎是糟糕的项目管理,并允许这样的不良做法似乎并不值得.最后,你只是允许制造混乱.

我能想到的唯一情况是,你可以在哪些地方进行表名冲突,这是因为你有一个学习SQL的课程,学校的IT管理员希望每个学生能够创建他们喜欢的表格.当然,在我看来,问题是管理员为什么不为每个学生创建1个数据库,而不是每个学生创建1个数据库和1个模式? Q1:为什么?

哪些其他用例显示了模式的好处?

实施 - 或 - - 的性质

我也对模式的实现/性质感到困惑.
我们假设我们有1个DB,它有3个模式.每个用户1个模式如下:
user1 ='admin' - tableA,tableU,tableJ,tableK,
user2 ='joe '------ tableU,tableJ,
user3 ='kate ----- tableU,tableK.

在上面的例子中,我的目的是让tableU在用户之间共享(在schema joe和schema kate之间).他们不应该获得自己的表的独立副本,他们应该共享对此表的共同访问权限.这种用法对我来说很有意义.用户应该添加/修改/可能删除记录...不添加/修改/删除表.不过我不确定PostgreSQL模式是否可行. Q2:如果我想像上面所描述的那样共享tableU,那么架构joe和schema kate会不会得到自己的表副本,或者我可以指定它们不应该获得自己的副本而只是共享对现有表的访问权限吗?

tableJ相同tableK ......除了凯特不能使用tableJ和乔不能使用tableK.根据我对模式的有限理解,这似乎是模式的本质. 问题3:为每个用户制作表副本的目的是什么?这两个表具有相同的结构(列和约束),并且浪费存储空间来为每个用户制作这样的表的独立副本.如果每个用户都拥有自己的每个表副本,我也会认为这将是一场噩梦.我们会抛出像窗口标准化这样的关键概念.这将是一个难以维护的混乱.在我看来,每个用户都应该在公共数据库中添加/修改/删除记录到公共表.

我见过谷歌搜索有关模式的人为每个在线客户为他们的网站制作了一个单独的模式+表格.他们有10万个模式. Q4:我在这里缺少什么?这至少可以说是极端的.他们应该为每个客户添加记录到标准表,而不是为每个客户制作模式和表.这只会增加我的困惑.

无论如何,我希望我已经清楚地说明了我的困惑的关键点.

我正在寻找的是:
(1)通过实际用例示例来清除模式的好处.
(2)清除模式的实现细节.


编辑v.3

潜在的用例#2

如果我正确理解Neville K,他建议作为一个用例:

1个DB,有3个模式.每个用户1个模式(例如,用户名== schema_name):
user1 ='admin' - tableA,tableLogin,tblFin1,tblFin2,tblFin3,tblPrj1,tblPrj2,tblPrj3.
user2 ='joe '------ tableLogin,tblFin1,tblFin2,tblFin3
user3 ='kate ----- tableLogin,tblPrj1,tblPrj2,tblPrj3.

在这里,乔在Fin部门,Kate是项目经理.joe使用的app仅限于Finance相关表,kate使用的应用程序仅限于项目管理表.此限制是通过将用户名绑定到与搜索路径绑定的模式(在DB级别强制执行)来实施的.

问题5:如果没有架构,是否会有相同的限制?哪些应用程序可用于哪些表是应用程序在开发团队提交应用程序时设置的表的功能.没有?或者我们假设我们正在使用您指向数据库的现成应用程序,我们担心应用程序无法在其设置中限制为某些表(并且此限制已锁定在现成的密码中应用)?

潜在用例#3

如果我正确地理解了Catcall,他建议作为一个用例:

您希望将托管在1个物理系统上的数据库服务器的服务租赁/租赁给需要数据库服务的多个客户的方案.因此,出现了类似多租户的情况.此时,您可以选择:
(1)为每个租户(客户)建立一个单独的数据库
- 更安全,更方便,但每个系统可以支持更少的租户.
(2)一个共享数据库,每个租户(客户) …

database postgresql database-design

32
推荐指数
4
解决办法
9021
查看次数

Windows控制台和Qt Unicode文本

我花了一整天的时间试图弄明白这一点,没有运气.我看着Everywhere,但工作代码没有运气.

操作系统:Win XP Sp2 IDE和FRAMEWORK:C++,Qt Creator 2.0.

我试图输出一些unicode(UTF-8)文本到Windows控制台,但我看到的只是乱码代替unicode字符.我知道win控制台确实支持unicode(自2000年以来)......至少根据维基百科和网上很多人的说法,我不知道如何让它与Qt一起工作.我见过的大多数"解决方案"(没有见过很多)使用C++和WInAPI技术......我不能使用它,因为这不是Qt方式.我正在使用QStrings和Qt!

代码如下.我拿出了所有不同的东西,我试图保持代码简单的帖子.希望有人可以让代码工作.

#include <QtCore/QCoreApplication>
#include <QString>
#include <QTextStream>          
#include <QDate>
#include <QFile>
using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QTextStream qin(stdin);         
    QTextStream qout(stdout);       

    //The last 2 chars in QString each need a double slash for an accent.
    QString szqLine = QString::fromUtf8("abc áéüóöú ??");

    //I want this text console output to be in red text color.
    qout << "Bellow are some unicode characters: " << endl; 

    //The Win XP …
Run Code Online (Sandbox Code Playgroud)

unicode console qt

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

MySQL + Qt QMYSQL插件=商业MySQL许可证?

我想很多人都想知道这一点.我在网络和堆栈上进行了搜索,虽然之前已经在堆栈中进行了讨论,但它并没有关于Qt ...也没有在相同的上下文中.

Qt是LGPL.
这意味着(只要你不修改Qt):(
1)商业开发人员不需要商业许可证($)就可以使用Qt.
(2)不需要将应用程序src代码泄露给任何要求它的人.

Oracle MySQL是GPL.
这意味着(即使你不修改MySQL) - 解释答:
(1)商业开发需要商业许可证(最低2000美元/年)才能使用MySQL.
(2)必须将您的应用程序src代码泄露给任何要求它的人.

这意味着(即使你不修改MySQL) - 解释B:
(1)商业开发者不需要商业许可证($)来使用MySQL.
(2)必须将您的应用程序src代码泄露给任何要求它的人.

这意味着(只要你不修改MySQL) - 解释C:
(1)商业开发者不需要商业许可证($)来使用MySQL.
(2)不需要将应用程序src代码泄露给任何要求它的人.

虽然LGPL很明确,但对于GPL存在很多困惑.我想知道哪个版本的GPL解释是正确的(A,B或C).我相信这里有一些专业人士知道这一点.

我对GPL的个人理解是GPL是关于库链接(代码重用......而不是应用程序使用)编写的.也就是说,如果您使用某些代码,或者扩展某些代码来制作应用程序,那么您的权利/限制以及其他所有人的权利是什么.我不相信GPL是指限制您对GPL应用的使用.如果我错了,请纠正我.

例如,LINUX的大部分都是GPL.如果我在Linux上进行开发,我的所有应用程序都必须是GPL吗?我认为这样的解释是不准确的.所以我认为使用GPL应用程序和使用/重新使用GPL src代码之间存在差异.

通过以上示例的扩展,如果我使用名为MySQL的应用程序...为什么MySQL的GPL许可证会感染我编写的任何应用程序仅仅是因为它使用MySQL数据库来存储和检索数据?这与使用Linux开发有什么区别?

现在,谈到我的困惑点,以及帖子的内容.在回答我的上一个问题时,我看到一些令人困惑的措辞,即如何链接到MySQL数据库很重要.我不明白这一点......虽然我认为一般的想法是用于链接到MySQL的API也可能是GPL.我们不是涵盖每个场景,而是针对API.

我在Qt中使用了什么库?我遵循Qt指令来构建QMYSQL(MySQL驱动程序).http://doc.qt.nokia.com/latest/sql-driver.html 此构建过程依赖于MySQL提供的一些文件(可能是GPL).我不知道Qt在什么意义上使用术语"驱动程序".从我的角度来看,"驱动程序"是一个允许某些东西工作的底层引擎,因此我不知道它与我的应用程序有什么关系,而不是在LINUX中安装一些GPL驱动程序,所以我可以启动LINUX并做一些商业编码.我也不明白为什么Qt让人们"构建"QMYSQL插件.是出于技术原因还是出于许可证原因?为了控制MySQL,我使用Qt"QSqlDatabase"和"QSqlQuery"类.

因此,如果我--USE--用于数据存储的MySQL和我的商业应用程序使用Qt来管理,存储,检索,更新我的MySQL数据库中的数据,上述GPL许可证解释中的哪一个是正确的(A,B或C)?

*最后的说明.我知道人们将MySQL与网站联系起来.让我们在本主题的背景下认为MySQL也适用于商业应用......而不仅仅是网站.两者之间的主要区别是网站需要中央数据库,业务应用程序可能要求每个客户都有自己的数据库部署.在一天结束时,它只存储数据(两种方式).据我所知,在与商业闭源应用程序相同的安装光盘中包含MySQL并不违反GPL,让安装程序安装它然后关闭的源应用程序制作数据库和表.如我错了请纠正我..

mysql qt open-source gpl

8
推荐指数
0
解决办法
1006
查看次数

QT无法写入unicode文件的unicode字符串

我正在使用QT Creator,创建了一个控制台应用程序.一切都是最新的.操作系统是Windows XP.

我创建了一个包含匈牙利字符的QString.大多数匈牙利字符不需要unicode,但是带有双斜线的字符需要unicode.

我尝试将QString内容写入文件,但我的unicode字符在文件中丢失了重音符号.换句话说,unicode信息在此过程中丢失了.

我的代码是吼叫.

#include <QtCore/QCoreApplication>
#include <QString>
#include <QTextStream>
#include <QDate>
#include <QFile>
using namespace std;


int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QString szqLine = "NON-UnicodeIsOK: áéüúöóí NEED-Unicode: ??";
    //These are Hungarian chars and require unicode. Actually, only the u & o, each having double
    //slashes for eccents require unicode encoding.

    //Open file for writing unicode chars to.
    QFile file("out.txt");
    if ( !file.open(QIODevice::WriteOnly | QIODevice::Text) ){
        return 1;
    }

    //Stream the QString text to …
Run Code Online (Sandbox Code Playgroud)

qt qt4

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

使用Qt设置setLastModified日期

我需要为某些文件设置上次修改日期.这是我的应用程序的基本能力.

我不知道如何用QT做到这一点.我没有看到它的方法/功能.我可以用Qt阅读日期,但我不知道如何设置日期.

现在......我知道一些(我认为实际上都是)来自MS的Windows API具有这种能力.

问题是我不是在寻找一个"Windows"唯一的解决方案.我需要这种能力才能在Windows,Linux和Mac上运行.这就是我选择Qt的原因......

建议的任何解决方案都应该是以API为中心的(不需要系统命令/实用程序),解决方案应涵盖3个主要操作系统(Win,Linux,Mac).

c++ qt posix qt4

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

CreateFile GetFileTime SetFileTime

当涉及到目录时,我在使用 GetFileTime 和 SetFileTime 时遇到问题。具体来说,我认为我的问题是我是 WinAPI 的新手,我认为我没有正确获得 HANDLE。

有2种情况。

首先,我只需要一个句柄来获取文件或目录时间戳(创建、访问、修改)。我想以一种安全灵活的方式制作这个手柄。不想在参数上太大方。

第二,我需要一个句柄,允许我修改文件或目录时间戳。我还想以最小的权限但以灵活和可靠的方式创建此句柄。

灵活是指在这两种情况下,我都需要代码在本地、网络共享和多线程应用程序中工作。多线程部分不是必需的,因为我的应用程序不会在文件/目录上创建多个句柄,但在后台运行的其他应用程序可能会这样做。

//QUESTION 1:
//I do this when I just need a handle to **GET** some attributes like dates.
//(here I just need a handle to get info I am not modding the item).
//Am I using the correct params if I need it to work in a 
//local + networked environment and also in a multi-threaded app???
h1 = CreateFile(itemA, GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (h1 == …
Run Code Online (Sandbox Code Playgroud)

c++ winapi

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

任何LGPL项目是否已经分叉并且在叉子之后保留了LGPL?

是否有任何LGPL项目分叉,以便他们在分叉后留下LGPL?我想知道是否有可能(已经完成).

场景假设:
(1)GPL版本存在于fork之前
(2)LGPL版本存在于fork之前

fork之后,可以fork为LGPL还是必须是GPL?

open-source gpl lgpl

5
推荐指数
0
解决办法
809
查看次数

QProcess问题,流程输出

我想弄清楚 QProcess 的使用。我看着Qt doc没有运气。
http://doc.qt.io/qt-4.8/qprocess.html

问题示例。

示例 1:下面的代码有效。

    #include <QtCore/QCoreApplication>
#include <QTextStream>
#include <QByteArray>
#include <QProcess>    

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream qout(stdout);    

    QProcess cmd;
    
    cmd.start("cmd");
    if (!cmd.waitForStarted())  {
        return false;
    }

    cmd.waitForReadyRead();
    QByteArray result = cmd.readAll();
    //qout << result.data() << endl;   //console junk captured, doesn't show. 

    //My test command
    cmd.write("echo hello");
    cmd.write("\n");

    //Capture my result
    cmd.waitForReadyRead();
    //This is my command shown by cmd, I don't show it, capture & discard it.
    result = cmd.readLine(); …
Run Code Online (Sandbox Code Playgroud)

qt qt4

5
推荐指数
1
解决办法
2万
查看次数

QProcess.startDetached()并写入其stdin

这段代码有什么问题?我无法写入已被分离的新进程的标准输入.对我而言,新流程是分离的,这一点非常重要.

QProcess commandLine;
commandLine.setWorkingDirectory("E:\\");  //does not work.
commandLine.startDetached("cmd.exe");     //works (but uses wrong working dir).
commandLine.write("echo hi\0");           //writes nothing.
commandLine.write("\n\r");                //Still nothing is written!
Run Code Online (Sandbox Code Playgroud)

qt qt4

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

Qt清除SQL查询

有什么区别

void QSqlQuery::clear ()
Run Code Online (Sandbox Code Playgroud)

void QSqlQuery::finish ()
Run Code Online (Sandbox Code Playgroud)

根据文档,我不知道差异是什么.有什么不同?我想知道何时使用一个而不是另一个.

编辑 - 文档中的更多细节和信息.
clear() -
清除结果集并释放查询持有的所有资源.
听起来像finish()也一样......

- 将查询状态设置为非活动状态.
完成也一样.

finish() -
指示数据库驱动程序,在重新执行之前,不会从此查询中获取更多数据.
具体是什么意思?这是什么后果?

- 如果您打算稍后重新使用查询,则可能有助于释放锁或游标等资源.
不清楚做同样的事吗?不清除释放锁,游标等?

- 将查询设置为非活动状态.
我相信清楚也是如此.

- 价值保留其价值.
这有什么意义?

qt

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

标签 统计

qt ×7

qt4 ×4

c++ ×2

gpl ×2

open-source ×2

console ×1

database ×1

database-design ×1

lgpl ×1

mysql ×1

posix ×1

postgresql ×1

unicode ×1

winapi ×1