小编Ada*_*331的帖子

当可以使用联接连接其他表时,在单个表中拥有多个外键是好还是坏做法?

假设我想创建一个可用于跟踪用户的银行帐户和交易的数据库。可在支票簿应用程序中使用的数据库。

如果我有一个用户表,具有以下属性:

  1. 用户身份
  2. 电子邮件
  3. 密码

然后我创建一个帐户表,它可以链接到某个用户:

  1. 帐户ID
  2. 账户描述
  3. 账户余额
  4. 用户身份

为了进行下一步,我创建一个事务表:

  1. 交易ID
  2. 交易描述
  3. is_withdrawal
  4. account_id // 该交易所属的账户
  5. user_id // 该交易所属的用户

将 user_id 放在事务表中是一个好的选择吗?如果我想获取每个用户的所有交易,这将使查询更清晰,例如:

SELECT * FROM transactions
JOIN users ON users.user_id = transactions.user_id
Run Code Online (Sandbox Code Playgroud)

或者,我可以从帐户表追溯到用户表

SELECT * FROM transactions
JOIN accounts ON accounts.account_id = transactions.account_id
JOIN users ON users.user_id = accounts.user_id
Run Code Online (Sandbox Code Playgroud)

我知道第一个查询更清晰,但这是最好的方法吗?

我担心的是,通过在事务表中添加这个额外的(冗余)列,我浪费了空间,而无需该列即可实现相同的结果。

mysql sql database sql-server join

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

如何在switch语句中使用通配符?

我有一个使用3个字母的字符串的switch语句.对于很多情况(但不是全部)我只想关注前2个字母.

例如,我希望每个以"FF"开头的代码都处理相同:

switch(code)
{
   case "FF(?)":
      // Handle it
      break;
   default:
      break;
}
Run Code Online (Sandbox Code Playgroud)

我能在这做什么?我可以使用通配符吗?我是否必须考虑每个FF代码?

出于显而易见的原因,我不希望有这样的代码,这可能会变得非常大:

case "FFA":
case "FFB":
case "FFD":
    // Handle it
Run Code Online (Sandbox Code Playgroud)

c# wildcard switch-statement

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

根据Python中的自定义字母对字符串值进行排序

我正在寻找一种根据自定义字母表对字符串列表进行排序的有效方法.

例如,我有一个字符串字母表,它是一个字符串"bafmxpzv"列表,仅由该字母表中包含的字符组成.

我想要一种方法来排序该列表与其他常见排序类似,但使用此自定义字母表.我怎样才能做到这一点?

python sorting

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

带有片段的Android Espresso功能测试

我的应用程序中有三个活动

  1. 登录活动
  2. 一项主要活动
  3. 细节活动

我想使用espresso来测试一系列事件:单击登录活动上的登录按钮,打开主活动,然后单击主活动中的列表项,打开详细活动,然后单击详细信息中的另一个按钮活动.我开始创建这个简单的测试,以获得对listview的引用:

public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> {

    public LoginActivityTest() {
        super(LoginActivity.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();

        getActivity();
    }

    public void testSequence() throws Exception {
        // Login
        onView(withId(R.id.button_log_in)).perform(click());

        // Check if MainActivity is loaded
        onView(withId(R.id.container)).check(matches(isDisplayed()));

        // Check if Fragment is loaded
        onView(withId(R.id.list)).check(matches(isDisplayed()));
    }
}
Run Code Online (Sandbox Code Playgroud)

mainActivity onCreate()方法中,我加载一个像这样的片段:

getFragmentManager().beginTransaction()
                .add(R.id.container, mListFragment)
                .commit();
Run Code Online (Sandbox Code Playgroud)

ListFragment片段有一个列表(R.id.list),但仍是测试失败了NoMatchingViewException:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: com.tests.android.development:id/list
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

java android functional-testing android-fragments android-espresso

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

如何使用CellValueChanged事件检索DataGridView单元格的先前值?

我正在编写一个使用DataGridView的C#应用​​程序,我想在每次用户更改那里的数据时验证输入.

我开始使用CellValidating事件,该事件具有非常好的CancelEdit()方法,该方法将单元格返回到其先前的值.但是,每次用户离开单元格时都会触发此事件,无论它是否已更改.

CellValueChanged是否支持对先前值的取消或回滚方法?这样我仍然可以验证数据,但不会浪费时间与不需要它的单元格,但如果数据无效,则不希望牺牲恢复单元格的能力.

这是一些代码:

private void dataGrid1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    if(dataGrid1.Columns[e.ColumnIndex].Name == "dateColumn")
    {
        String input = e.FormattedValue.ToString();

        // Split the date from MM/DD/YYYY format
        String[] temps = input.Split('/');
        try
        {
            if(temps[2].Length != 4)
                MessageBox.Show("The year entered is not the correct length.", "Invalid Year", MessageBoxButtons.OK);

            DateTime date = new DateTime(Convert.ToInt32(temps[2]), Convert.ToInt32(temps[0]), Convert.ToInt32(temps[1]));
        }
        catch (Exception ex) // If exception is thrown, date was invalid
        {
            MessageBox.Show("The date entered was invalid.", "Invalid date", MessageBoxButtons.OK);
            dataGrid1.CancelEdit(); // Set cell value back …
Run Code Online (Sandbox Code Playgroud)

c# datagridview event-handling

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

如何将CheckedListBox项设置为默认选中

Visual Studio中是否有一个选项可以将CheckedListBox中的所有项目设置为默认选中?我的意思是我希望在启动时检查所有项目,并且用户可以根据需要取消选择项目.

如果没有,我唯一的选择是在构造函数中以编程方式设置所有项目?

c# checkedlistbox winforms visual-studio-2013

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

查找重叠值的时间总和

几天来,我一直在努力解决这个问题.我有一台可能有错误的机器.在数据库中,我有错误出现时的开始和结束时间(在unix时间),以及错误类型(数字从5到12).我遇到的问题是多个错误可能同时发生(和重叠).

我的表看起来像这样:

   id| type | from       | to
    1| 6    | 1417179933 | 1417180006
    2| 6    | 1417180035 | 1417180065
    3| 9    | 1417180304 | 1417180409
    4| 6    | 1417180662 | 1417184364
    5| 8    | 1417180662 | 1417186832
    6| 9    | 1417180662 | 1417184364
    7| 12   | 1417180662 | 1417184364
    8| 6    | 1417184364 | 1417186832
    9| 9    | 1417184364 | 1417188054
Run Code Online (Sandbox Code Playgroud)

我需要找到这台机器的总错误持续时间.我无法总结上表中的所有差异,因为在同一时间间隔内可能出现两个或更多错误.记录按升序排序.

我的猜测是将每个记录(开始和结束时间)与之前进行比较,然后找出以秒为单位的差异.但是,此表可能会随着时间的推移而增长,搜索它是一个问题.

有没有一种聪明的方法在PHP或MySQL中找到机器不工作的总时间,可能在几分钟内?

php mysql math

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

从具有多个要求的两个表中选择值,但仅使用其中一个

我想根据条件加入两个表.

表A:

+--------+-------------+------+
| prefix | Destination | rate |
+----------------------+------+
| 56     |  Monn       |  25  |
| 5602   |  Monn M1    |  23  |
| 5604   |  Monn M3    |  44  |
| 5607   |  Monn M1    |  23  |
| 5625   |  Monn M2    |  22  |
| 23     |  Xpia       |  0.3 |
| 238    |  Xpia F3    |  0.9 |
+--------+-------------+------+
Run Code Online (Sandbox Code Playgroud)

表B:

+--------+-------------+------+
| prefix | Destination | rate |
+----------------------+------+
| 56     |  Monn …
Run Code Online (Sandbox Code Playgroud)

php mysql database join

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

尝试将文件上传到 Google 云端硬盘时不断收到“需要登录”错误

我正在编写一个 chrome 扩展,它将拦截某些下载(当前为 .doc 和 .docx 文件),并获取这些文件并自动将它们上传到您的 Google 驱动程序文件夹。这是我的清单:

{
    // Default manifest crap.
    "manifest_version": 2,
    "name": "App",
    "description": "SpartaHack 2016 application",
    "version": "1.0",
    "browser_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html"
    },
    // Content security needed to access gapi script.
    "content_security_policy": "script-src 'self' https://apis.google.com; object-src 'self'",
    // Need to view downloads, and identity for obvious reasons.
    // The other two permissions allow the script to access files that are outside our domain. 
    "permissions": [
        "downloads",
        "identity",
        "http://*/",
        "https://*/"
    ],
    // Gives …
Run Code Online (Sandbox Code Playgroud)

javascript drive google-chrome-extension google-drive-api google-chrome-app

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

自定义 JUnit 规则允许所有测试通过

我有一个引用一些静态方法的文件:

class MyViewModel {

    fun test() { }

    companion object {
        private val MY_STRING = ResourceGrabber.grabString(R.string.blah_blah)
    }
}
Run Code Online (Sandbox Code Playgroud)

在我对此文件的 JUnit 测试中,我编写了一些代码来模拟设置中的资源抓取器。这将编译并运行,并且以下测试失败,正如我所期望的那样:

@PrepareForTest(ResourceGrabber::class)
@RunWith(PowerMockRunner::class)
class MyViewModelTest {
    private lateinit var viewModel: MyViewModel

    @Before
    fun setup() {
        PowerMockito.mockStatic(ResourceGrabber::class.java)
        val mockResourceGrabber = Mockito.mock(ResourceGrabber::class.java)

        whenever(mockResourceGrabber.grabString(Mockito.anyInt())).thenAnswer { invocation ->
            val res: Int? = invocation?.arguments?.get(0) as? Int
            TestResourceGrabber.grabString(res)
        }

        viewModel = MyViewModel()
    }

    @Test
    fun someTest() {
        // Fails, as expected.
        assertEquals(2, 3)
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是事情变得奇怪的地方。我最近了解了自定义 JUnit 规则,您可以使用这些规则来避免跨测试出现一些重复的代码。在这种情况下,我不想将我的资源抓取器工作复制并粘贴到每个使用它的测试套件中,所以我制定了一个自定义规则:

class ResourceGrabberRule : TestRule {
    override fun apply(base: …
Run Code Online (Sandbox Code Playgroud)

junit android mockito powermock kotlin

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